<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    
    const p1 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据A")
        throw new Error("A错误")
        setTimeout(() => {
          console.log("请求A结束....");
          resolve("A数据")
        }, 1500)
      } catch (e) {
        reject(e.message)
      }
    })

    const p2 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据B")
        // throw new Error("B错误")
        setTimeout(() => {
          console.log("请求B结束....");
          resolve("B数据")
        }, 2500)
      } catch (e) {
        reject(e.message)
      }
    })


    const p3 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据C")
        throw new Error("C错误")
        setTimeout(() => {
          console.log("请求C结束....");
          resolve("C数据")
        }, 2000)
      } catch (e) {
        reject(e.message)
      }
    })

    /* 
      Promise.all方法:
        - 接受一个数组(原则上是iterable类型)作为参数
        - all方法默认返回pending状态的promise实例
        - 当所有的promise实例全部完成,返回fulfilled状态的实例,值为所有成功的值组成的数组
        - 当其中有一个promise实例执行失败,则all方法返回失败的promise实例,值是这个错误值
    */

    const result = Promise.any([p1,p3,p2]);
    console.log("result", result);
    result.then(value => {
      console.log("全部完成");
    }).catch(reason => {
      console.log("有错误的", reason);
    })




    //第一遍 promise.all 方法
    const k = new Promise((resolve,reject)=>{

      try{
        //模拟发送请求
        console.log('开始请求A数据');
        // throw new Error('网络有问题··')
        setTimeout(()=>{
          console.log('A数据请求成功');
          resolve('数据A')
        },2000)

      }catch(e){
        
        reject(e.message)

      }
    }) 
    const k1 = new Promise((resolve,reject)=>{
      try{
        //模拟发送请求
        console.log('开始请求B数据');
        // throw new Error('网络有问题,请求失败')
        setTimeout(()=>{
          console.log('B数据请求成功');
          resolve('数据B')
        },2000)

      }catch(e){
        
        reject(e.message)

      }
    })


    const k2 =new Promise((resolve,reject)=>{
      try{
        //模拟发送请求
        console.log('开始请求C数据');
        // throw new Error('网络有问题')
        setTimeout(()=>{
          console.log('C数据请求成功');
          resolve('数据C')
        },2000)

      }catch(e){
        
        reject(e.message)

      }
    })
    //    promise.all方法
    //     接受一个数组(原则上是iterable类型)作为参数
    //     - all方法默认返回pending状态的promise实例
    //     - 当所有的promise实例全部完成,返回fulfilled状态的实例,值为所有成功的值组成的数组
    //     - 当其中有一个promise实例执行失败,则all方法返回失败的promise实例,值是这个错误值
    const result1 = Promise.all([k,k1,k2])
    console.log('result1',result1);
    result1.then((value)=>{
      console.log('数据全部完成');
    },(reason)=>{
      console.log('数据请求失败',reason);
    })


    //第二遍 promise.all
    const two = new Promise((resolve,reject)=>{
      try{
        // throw new Error('请检查网络')
        console.log('开始请求名单数据');
        setTimeout(()=>{
          console.log('名单数据请求成功');
          resolve('名单数据')
        },1000)
      }catch(e){
        reject(e.message)
      }
    })

    const two1 = new Promise((resolve,reject)=>{
      try{
        // throw new Error('请检查网络')
        console.log('开始请求账号数据');
        setTimeout(()=>{
          console.log('账号数据请求成功');
          resolve('账号数据')
        },1000)
      }catch(e){
        reject(e.message)
      }
    })

    const two2 = new Promise((resolve,reject)=>{
      try{
        // throw new Error('请检查网络')
        console.log('开始请求密码数据');
        setTimeout(()=>{
          console.log('密码数据请求成功');
          resolve('密码数据')
        },1000)
      }catch(e){
        reject(e.message)
      }
    })
    //    promise.all方法
    //     接受一个数组(原则上是iterable类型)作为参数
    //     - all方法默认返回pending状态的promise实例
    //     - 当所有的promise实例全部完成,返回fulfilled状态的实例,值为所有成功的值组成的数组
    //     - 当其中有一个promise实例执行失败,则all方法返回失败的promise实例,值是这个错误值

    const result2 = Promise.all([two,two1,two2])
    console.log(result2);
    result2.then((value)=>{
      console.log('数据全部请求成功');
    },(reason)=>{
      console.log('数据请求失败',reason);
    })

    //第三遍 promise.all
    const three = new Promise((resolve,reject)=>{
      try{
        // throw new Error('请检查网络')
        console.log('开始请求姓名数据');
        setTimeout(()=>{
          console.log('姓名数据请求成功');
          resolve('姓名数据')
        },1000)
      }catch(e){
        reject(e.message)
      }
    })

    const three1 = new Promise((resolve,reject)=>{
      try{
        // throw new Error('请检查网络')
        console.log('开始请求年龄数据');
        setTimeout(()=>{
          console.log('年龄数据请求成功');
          resolve('年龄数据')
        },1000)
      }catch(e){
        reject(e.message)
      }
    })

    const three2 = new Promise((resolve,reject)=>{
      try{
        // throw new Error('请检查网络')
        console.log('开始请求性别数据');
        setTimeout(()=>{
          console.log('性别数据请求成功');
          resolve('性别数据')
        },1000)
      }catch(e){
        reject(e.message)
      }
    })
    //    promise.all方法
    //     接受一个数组(原则上是iterable类型)作为参数
    //     - all方法默认返回pending状态的promise实例
    //     - 当所有的promise实例全部完成,返回fulfilled状态的实例,值为所有成功的值组成的数组
    //     - 当其中有一个promise实例执行失败,则all方法返回失败的promise实例,值是这个错误值

    const result3 = Promise.all([three,three1,three2])
    console.log(result2);
    result2.then((value)=>{
      console.log('数据全部请求成功');
    },(reason)=>{
      console.log('数据请求失败',reason);
    })



  </script>
</body>

</html>